Software development using patterns has become increasingly popular. In particular, pattern use in software development improves productivity by automating application development and promoting reuse of existing code. Typically, Software development using software patterns relies on the use of code generation programs which convert the software patterns to an actual implementation in computer code. In some cases, a pattern can be defined by a template, indicating that different options are available for the pattern. However, code generation programs encountering such template-defined software patterns typically require that all possible options for the template be precisely defined at the time of code generation. This can restrict the amount of customization possible to only that known at the time the template is generated. This can complicate any subsequent customization of an application generated from the patterns.
In these instances, application customization can generally only be implemented either using an extension to the code generation program or by modifying the final code generated from the pattern. Both of these solutions have drawbacks. Extension of code generation programs is often difficult for application programmers. In particular, this generally requires a complete understanding of how to build code generation programs as well as a complete understanding of the implementation of the code generation program to be modified. Modifying generated code is simpler than extending the code generation program, but the advantages of the automated development process (e.g., generating code for multiple languages, higher level of abstraction, etc.) are lost.